﻿using ImCommon;
using System;
using System.Windows.Forms;

namespace ImClient {
    // 聊天窗口
    public partial class ChatWindow: Form {
        public delegate void ON_CHAT_C2S(ChatInfo chat);
        
        public ON_CHAT_C2S OnChatC2S;   // 聊天事件（客户端到服务器）

        private readonly Control mCallback;     // 回调
        private readonly string mFriendName;    // 好友名

        /**
         * 构造方法。
         * @param callback      回调
         * @param friendName    好友名
         */
        public ChatWindow(Control callback, string friendName) {
            // 初始化控件
            this.InitializeComponent();

            // 初始化成员
            mCallback = callback;
            mFriendName = friendName;

            // 设置窗口标题
            Text = friendName;

            // 设置最大输入长度
            EditInput.MaxLength = Const.MAX_CONTENT_LEN;
        }

        /**
         * "发送"按钮的单击响应方法。
         * @param sender    事件发送者
         * @param e         事件相关信息
         */
        private void ButtonSend_Click(object sender, EventArgs e) {
            EditInput.Focus();

            // 获取用户输入的聊天内容
            string content = EditInput.Text;

            // 获取当前时间
            string time = DateTime.Now.ToString(Const.DATE_TIME_FORMAT);

            // 显示聊天内容
            ChatInfo chatInfo = new ChatInfo(content, mFriendName, Client.UserName, time);
            this.SetContent(chatInfo);

            // 清空聊天内容编辑框
            EditInput.Text = "";

            // 发送聊天内容
            mCallback.Invoke(OnChatC2S, chatInfo);
        }

        /**
         * 设置聊天内容。
         * @param chatInfo  聊天信息
         */
        public void SetContent(ChatInfo chatInfo) {
            // 显示聊天内容
            string show = chatInfo.mSrcUsername + Const.LEFT_BR + chatInfo.mTime + Const.RIGHT_BR + chatInfo.mContent + Const.WRAP;
            EditHistory.Text += show;

            // 滚动到最底行
            EditHistory.Select(EditHistory.TextLength, 0);
            EditHistory.ScrollToCaret();
        }
    }
}
